<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>



  <script>
    // 1. 闭包函数
    function sum(a) {
      return function (b) {
        return a + b;
      }
    }

    sum(2)(3);
    console.log(sum(2)(3));

    // 2. 数组扁平化
    const arr = [1, [2, [3, [4, [5]]]], [6], 7, 8, [[9]]];
    console.log('原数组', arr);

    // （1） ES6新特特性
    console.log('（1） ES6新特特性');
    let arr1 = arr.flat(Infinity);
    console.log('arr1', arr1);

    // （2） replace + split
    console.log(' （2） replace + split');
    let str = JSON.stringify(arr);
    console.log('字符串处理', str);
    let arr2 = str.replace(/(\[|\])/g, '');
    console.log(arr2);
    arr2 = arr2.split(",");
    console.log(arr2);
    let arr3 = str.replace(/(\[|\])/g, '').split(',');
    console.log(arr3);

    console.log(' （3） replace + JSON.parse');
    // 将arr变成字符串
    let str2 = JSON.stringify(arr);
    console.log(str2);
    // 先去除所有的括号
    let str3 = str2.replace(/(\[|\])/g, '');
    // 再加上左右括号
    str3 = '[' + str3 + ']';
    str3 = JSON.parse(str3); // 真正意义上实现的数组扁平化
    console.log(str3);  // [ 1, 2, 3, 4, 5 ]  Array

    // (4) Map思想
    console.log('(4) Map思想');
    function flatten(arr) {
      return arr.toString().split(',').map(function (item) {
        return +item //+可以快速获得Number类型
      })
    }
    console.log(flatten(arr));  // [ 1, 2, 3, 4, 5 ]

    
    // （5） 扩展运算符(...)
    // 此方法借用了数组中的Array.isArray和some方法，使用while循环来不断对数组判断里面是否有数组，存在就使用...将其展开，也算是一种比较便捷的方法。
    console.log('5） 扩展运算符(...)');
    function Flatten(array) {
      // 使用Array.isArray判断数组中是否有数组嵌套
      // 使用some方法进行控制while循环
      while (array.some((item) => Array.isArray(item))) {
        // 将数组展开后再次覆盖
        array = [].concat(...array)
      }
      return array;
    }
    console.log(Flatten(arr));//[ 1, 2, 3, 4, 5 ]


    // 3. 求数组中相同元素
    var subSet = function(arr1, arr2) {
        var arr = [];
        for(var i=0;i<arr1.length;i++){
            if(arr2.indexOf(arr1[i]) != '-1'){
                arr.push(arr1[i]);
            }
        }
        console.log(arr);
        return arr;
    };
    var a = [1, 2, 4, 5, 6, 8], b=[1, 2, 3, 6, 8];
    subSet(b,a)

  </script>
</body>

</html>